package lambda表达式;

import java.util.Arrays;
import java.util.Comparator;

public class lambdaText {
    public static void main(String[] args) {
        //Arrays函数，需要用包装类
        Integer[] arr = {2, 7, 1, 5, 4, 3, 9, 6, 8};

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        System.out.println(Arrays.toString(arr));//输出

        System.out.println("--------------lambda表达式的完整写法--------------------");

        Integer[] arr1 = {2, 7, 1, 5, 4, 3, 9, 6, 8};
        //lambda表达式的完整写法
        Arrays.sort(arr1,(Integer o1, Integer o2) -> {
                return o1 - o2;
            }
        );
        System.out.println(Arrays.toString(arr1));//输出

        System.out.println("--------------lambda表达式的省略写法(1)--------------------");

        Integer[] arr2 = {2, 7, 1, 5, 4, 3, 9, 6, 8};
        //lambda表达式的省略写法，对于匿名内部new Comparator只保留-函数形参-和-方法体-
        Arrays.sort(arr2, (o1, o2) -> {
                    return o2 - o1;
                }
        );
        System.out.println(Arrays.toString(arr2));//输出

        System.out.println("--------------lambda表达式的省略写法(2)--------------------");

        Integer[] arr3 = {2, 7, 1, 5, 4, 3, 9, 6, 8};
//        lambda表达式的省略写法，对于匿名内部new Comparator，可推导，可省略
//        对于小括号(Integer o1, Integer o2)：数据类型可以省略，如果参数只有一个，小括号还可以省略
//        对于大括号{}：如果方法体只有一行，return，分号，大括号都可以省略，但需要同时省略
        Arrays.sort(arr3, (o1, o2) -> o1 - o2);
        System.out.println(Arrays.toString(arr3));//输出
    }
}
